﻿/*
 * Copyright(C) 2012,ajayumi 保留所有权利。( All rights reserved. )
 * 
 * 文件名称：JQueryGridColumnsConfig.cs
 * 摘    要：
 * 当前版本：1.0
 * 作    者：黄乙冬 (ajayumi)
 * 创建日期：2012年6月1日星期五
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Xml;

namespace ajayumi.Platform.Web.Controls.DataGrid
{
    /// <summary>
    /// 
    /// </summary>
    class JQueryGridColumnsConfig
    {
        public List<JQueryGridColumns> GetColumnsList(string fields, string tableName)
        {
            List<JQueryGridColumns> jgcList = new List<JQueryGridColumns>();
            //JQueryGridColumns jgc;
            //SqlDataReader sdr = SqlHelper.ExecuteReader(CommandType.Text, "select " + fields + " from " + tableName);
            //DataTable dt = sdr.GetSchemaTable();
            //foreach (DataRow dr in dt.Rows)
            //{
            //    jgc = new JQueryGridColumns();
            //    jgc.ColumnName = dr["ColumnName"].ToString();
            //    jgc.ColumnSize = int.Parse(dr["ColumnSize"].ToString());
            //    jgc.DataType = dr["DataType"].ToString();
            //    jgc.IsIdentity = bool.Parse(dr["IsIdentity"].ToString());
            //    jgcList.Add(jgc);
            //}
            return jgcList;
        }

        public void BuildColModelXML(string xmlDocPath, string fields, string tableName, bool edit)
        {
            List<JQueryGridColumns> jgcList = GetColumnsList(fields, tableName);
            /*  colModel配置
             *  align           left,center,right 
             *  detefmt         date:true 
             *  editable        flase 
             *  editoptions 　　edittype为先决条件，此为值，[] 
             *  editrules 　　　编辑规范 
             *  edittype        text,textarea,select,checkbox,password 
             *  formatoptions 
             *  formatter 
             *  hidedlg 　　　　false (appear in the modal dialog) 
             *  hidden 　　　　 false 在加载时是否隐藏列 
             *  index 　　　　　为排序用，最方便的是设为数据库字段 
             *  key 　　　　　　false 
             *  label 　　　　　当没有设置colNames时，在列里用此代替，此项也为空时，就是name代替 
             *  name 　　　　　 必要的属性，具有唯一标识性，如在弹出的editform窗体中，将作为input的name属性 
             *  resizable 　　　true，列宽可调节 
             *  search 　　　　 true 
             *  sortable 　　　 true 
             *  sorttype 　　　 text,int,float,date 
             *  width 　　　　　150 　
             */
            XmlTextWriter xtw = new XmlTextWriter(xmlDocPath, Encoding.UTF8);
            xtw.Formatting = Formatting.Indented;
            xtw.WriteStartDocument();
            xtw.WriteStartElement("root");
            xtw.WriteAttributeString("fields", fields);
            xtw.WriteAttributeString("tableName", tableName);
            foreach (JQueryGridColumns jgc in jgcList)
            {
                xtw.WriteStartElement("columns");
                if (jgc.IsIdentity) xtw.WriteAttributeString("IsIdentity", "True");
                xtw.WriteAttributeString("align", "center");
                xtw.WriteAttributeString("index", jgc.ColumnName);
                xtw.WriteAttributeString("name", jgc.ColumnName);
                xtw.WriteAttributeString("label", jgc.ColumnName);
                if (jgc.ColumnSize < 100) xtw.WriteAttributeString("width", "100"); else xtw.WriteAttributeString("width", "150");
                //DateTime,Int32,Decimal,String
                switch (jgc.DataType)
                {
                    case "System.DateTime":
                        xtw.WriteAttributeString("sorttype", "date");
                        xtw.WriteAttributeString("editrules", "{date:true}");
                        break;
                    case "System.Int32":
                        xtw.WriteAttributeString("sorttype", "int");
                        xtw.WriteAttributeString("editrules", "{integer:true}");
                        break;
                    case "System.Decimal":
                        xtw.WriteAttributeString("sorttype", "float");
                        xtw.WriteAttributeString("editrules", "{number:true}");
                        break;
                    case "System.String":
                        xtw.WriteAttributeString("sorttype", "text");
                        break;
                    default:
                        break;
                }
                if (edit && !jgc.IsIdentity) xtw.WriteAttributeString("editable", "true");
                xtw.WriteEndElement();
            }
            xtw.WriteEndElement();
            xtw.WriteEndDocument();
            xtw.Close();
        }
    }
}
